﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Linq.Expressions;

namespace WanDa.Dal
{
    public class BaseDal<T> where T : class,new()
    {
        protected DbContext dbcontext = DbContextFactory.CreateDbcontext();
        public void Add(T model)
        {
            dbcontext.Set<T>().Add(model);
        }
        public void Del(int id)
        {
            var model = dbcontext.Set<T>().Find(id);
            dbcontext.Set<T>().Remove(model);
        }
        public void Upd(T model)
        {

        }
        public IQueryable<T> Show(Expression<Func<T, bool>> whereLambda)
        {
            return dbcontext.Set<T>().Where(whereLambda);
        }
        public IQueryable<T> ShowPage<type>(int pageSize, int pageIndex, bool isAsc, Expression<Func<T, type>> OrderByLambda, Expression<Func<T, bool>> WhereLambda)
        {
            //是否升序
            if (isAsc)
            {
                return dbcontext.Set<T>().Where(WhereLambda).OrderBy(OrderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
            }
            else
            {
                return dbcontext.Set<T>().Where(WhereLambda).OrderByDescending(OrderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
            }
        }
        /// <summary>
        ///  一个业务中有可能涉及到对多张表的操作,那么可以将操作的数据,打上相应的标记,最后调用该方法,将数据一次性提交到数据库中,避免了多次链接数据库。
        /// </summary>
        /// <returns></returns>
        public bool SaveChanges()
        {
            return dbcontext.SaveChanges() > 0;
        }
    }
}
